/**
* @fileOverview 常用数组操作类
* @author <a href=”www.liujto.com”>liujto</a>
* @createDate  2019-10-10
* @copyright https://www.liujto.com
* @version 1.0
*/

/**
 * 根据下标移除数组
 * @param {Array} _array 需要移除的数组
 * @param {Number} _index 需要移除的下标
 */
function ArrayRemoveByIndex(_array, _index) {
    if (_index < 0) {
        return _array;
    }
    var news = [];
    for (var i = 0; i < _array.length; i++) {
        if (i != _index) {
            news.push(_array[i]);
        }
    }
    return news;
}
/**
 * 根据名称移除数组
 * @param {Array} _array 需要移除的数组
 * @param {String} _name 需要移除的对象名称 如id
 * @param {Number} _val 需要移除的对象名称对应的值
 */
function ArrayRemoveByName(_array, _name, _val) {
    var newlist = [];
    for (var i = 0; i < _array.length; i++) {
        if (_array[i][_name] != _val) {
            newlist.push(_array[i]);
        }
    }
    return newlist;
}
/**
 * 把对象加入到指定下标后
 * @param {Array} _array 需要操作的数组
 * @param {Number} _index 需要插入的下标
 * @param {Object} _item 需要插入的对象
 */
function ArrayInsertByIndex(_array, _index, _item) {
    var newlist = [];
    for (var i = 0; i < _array.length; i++) {
        newlist.push(_array[i]);
        if (i == _index) {
            newlist.push(_item);
        }
    }
    return newlist;
}
/**
 * 获取指定对象的下标
 * @param {Array} _array 需要操作的数组
 * @param {Object} _item 需要查询的对象
 */
function ArrayIndexOf(_array, _item) {
    return _array.indexOf(_item);
}
/**
 * 移除指定值的元素
 * @param {Array} _array 需要操作的数组
 * @param {Object} _value 指定的值
 */
function ArrayRemove(_array, _value) {
    //map方式
    //return _array.filter(c=>c==_value);

    var newlist = [];
    for (var i = 0; i < _array.length; i++) {
        if (_array[i] != _value) {
            newlist.push(_array[i]);
        }
    }
    return newlist;
}
/**
 * 在数组中查找指定对象
 * @param {Array} _array 需要操作的数组
 * @param {Stirng} _name 指定对象名称如id
 * @param {Object} _val 指定对象对应的值
 */
function ArrayFindByName(_array, _name, _val) {
    if(_name.length>0) {
        for (var i = 0; i < _array.length; i++) {
            if (_array[i][_name] == _val) {
                return _array[i];
            }
        }
        return null;
    }
    //直接查询
    var _index=_array.indexOf(_val);
    if(_index<0) {
        return null;
    }
    return _array[_index]
}
/**
 * 更新指定对象的内容
 * @param {Array} _array 需要操作的数组
 * @param {String} _name 指定对象名称如id
 * @param {Object} _val 指定对象对应的值
 * @param {Object} _obj 更新的内容
 */
function ArrayUpdateByName(_array, _name, _val, _obj) {

    for (var i = 0; i < _array.length; i++) {
        if (_array[i][_name] == _val) {
            _array[i] = _obj;
            return _array;
        }
    }
    return _array;
}
/**
 * 更新数组指定对象的内容
 * @param {Array} _array 需要操作的数组
 * @param {String} _name 指定对象名称如id 此值两者不能变
 * @param {Object} _obj 更新的内容
 */
function ArrayUpdateByObj(_array, _name, _obj) {
    for (var i = 0; i < _array.length; i++) {
        if (_array[i][_name] == _obj[_name]) {
            _array[i] = _obj;
            return _array;
        }
    }
    return _array;
}
/**
 * 元素上移
 * @param {Array} arr 需要操作的数组
 * @param {Number} index 需要操作的下标
 */
function ArrayUp(arr, index) {
    if (index - 1 < 0) {
        return swapArray(arr, index, index - 1);
    }
    return arr;
}
function swapArray(arr, index1, index2) {
    arr[index1] = arr.splice(index2, 1, arr[index1])[0];
    return arr;
}

export default {
    ArrayRemoveByIndex: ArrayRemoveByIndex, //移除指定下标的元素
    ArrayRemoveByName: ArrayRemoveByName, //移除指定对象的元素
    ArrayRemove: ArrayRemove, //移除指定值的元素
    ArrayInsertByIndex: ArrayInsertByIndex, //将元素插入指定下标后
    ArrayIndexOf: ArrayIndexOf, //获取指定对象的下标
    ArrayFindByName:ArrayFindByName,//在数组中查找指定对象
    ArrayUpdateByName: ArrayUpdateByName, //更新数组指定对象的内容
    ArrayUpdateByObj:ArrayUpdateByObj,//更新数组指定对象的内容
    ArrayUp:ArrayUp,//元素上移
}